عملگرهای ANY و ALL به شما این امکان را می دهند که مقایسه ای بین یک مقدار ستون و طیفی از مقادیر دیگر انجام دهید.
اپراتور ANY:
در نتیجه یک مقدار بولی برمی گرداند
اگر هر یک از مقادیر فرعی شرایط را برآورده کند، TRUE را برمی گرداند
ANY به این معنی است که اگر عملیات برای هر یک از مقادیر موجود در محدوده درست باشد، شرط درست خواهد بود.
اپراتور ALL:
در نتیجه یک مقدار بولی برمی گرداند
اگر همه مقادیر فرعی شرایط را برآورده کنند، TRUE را برمی گرداند
با دستورات SELECT، WHERE و HAVING استفاده می شود
ALL به این معنی است که شرط فقط در صورتی درست خواهد بود که عملیات برای همه مقادیر در محدوده درست باشد.
در زیر منتخبی از جدول "محصولات" در پایگاه داده نمونه Northwind آمده است:
ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
---|---|---|---|---|---|
1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18 |
2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19 |
3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10 |
4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22 |
5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
6 | Grandma's Boysenberry Spread | 3 | 2 | 12 - 8 oz jars | 25 |
7 | Uncle Bob's Organic Dried Pears | 3 | 7 | 12 - 1 lb pkgs. | 30 |
8 | Northwoods Cranberry Sauce | 3 | 2 | 12 - 12 oz jars | 40 |
9 | Mishi Kobe Niku | 4 | 6 | 18 - 500 g pkgs. | 97 |
و یک انتخاب از جدول "جزئیات سفارش":
OrderDetailID | OrderID | ProductID | Quantity |
---|---|---|---|
1 | 10248 | 11 | 12 |
2 | 10248 | 42 | 10 |
3 | 10248 | 72 | 5 |
4 | 10249 | 14 | 9 |
5 | 10249 | 51 | 40 |
6 | 10250 | 41 | 10 |
7 | 10250 | 51 | 35 |
8 | 10250 | 65 | 15 |
9 | 10251 | 22 | 6 |
10 | 10251 | 57 | 15 |
نمونه های SQL ANY
دستور SQL زیر اگر بیابد هر رکوردی در جدول OrderDetails مقداری برابر با 10 دارد، ProductName را فهرست میکند (این مقدار TRUE را برمیگرداند زیرا ستون Quantity دارای مقادیری 10 است):
SELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10);
دستور SQL زیر اگر بیابد هر رکوردی در جدول OrderDetails دارای مقداری بزرگتر از 99 باشد، ProductName را فهرست میکند (به دلیل اینکه ستون Quantity مقادیری بزرگتر از 99 دارد، این مقدار TRUE را برمیگرداند):
SELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 99);
دستور SQL زیر اگر بیابد هر رکوردی در جدول OrderDetails دارای مقدار بزرگتر از 1000 باشد، ProductName را فهرست میکند (این مقدار FALSE را برمیگرداند زیرا ستون Quantity مقادیر بزرگتر از 1000 ندارد):
SELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 1000);
عبارت SQL زیر همه نامهای محصول را فهرست میکند:
SELECT ALL ProductName
FROM Products
WHERE TRUE;
اگر تمام رکوردهای جدول OrderDetails مقدار برابر با 10 داشته باشند، عبارت SQL زیر، ProductName را فهرست میکند.
SELECT ProductName
FROM Products
WHERE ProductID = ALL
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10);